Enterprise software systems are typically sophisticated, large-scale systems that support many, e.g., hundreds or thousands, of concurrent users. Examples of enterprise software systems include financial planning systems, budget planning systems, order management systems, inventory management systems, sales force management systems, business intelligence tools, enterprise reporting tools, project and resource management systems and other enterprise software systems.
Many enterprise performance management and business planning applications require a large population of users to enter data that the software then accumulates into higher level areas of responsibility in the organization. The system may perform mathematical calculations on the data, combining data submitted by one user with data submitted by another. Using the results of these calculations, the system may generate reports for review by higher management.
The voluminous planning data captured via the enterprise software system is typically stored in one or more multidimensional data cubes. Individual computers associated with the enterprise planning system maintain an object store of data objects, such as a “dataset” object, to access relevant portions of the multidimensional data within the data cubes. To facilitate data access and traversal of the multidimensional data sets, the object model may also instantiate indexer objects to calculate and maintain references (e.g., indices) into the datasets based on their dimensionality. For example, a typical indexer object provides an interface having methods to address to a “next” data element within the datasets and return the data element currently referenced by the indexer. Typically, an indexer object iterates through the data store via the move next method, and returns the currently referenced data element once a “get current” method is called.
Often a generic Indexer object is used that may be used to traverse and access datasets of a wide variety of class types. The generic Indexer object returns the referenced data element as a generic object type even though in actuality the data object may be of a specific object type, such as an object of type Double or Integer. While the generic Indexer object is flexible, i.e., may be utilized by a wide variety of calling classes, by returning a generic object, type safety verification may be difficult if not impossible to perform on the values returned by the generic Indexer object due to its ability to return only generic data types capable of being assigned to an object of any type.